The present invention relates generally to data processing systems and, more particularly, to avoiding gather and scatter when calling Fortran 77 code from Fortran 90 code.
Before 1990, programmers wrote enormous amounts of code in the Fortran 77 (F77) programming language, which is a fixed parameter language, meaning that each call to a particular subprogram (e.g., a subroutine or a function) contains the same list of parameters. For example, the subprogram SASUM (N, A, Inca) requires three parameters, each of which must be specified every time the subprogram is called. In this example, xe2x80x9cNxe2x80x9d indicates the length of A, xe2x80x9cAxe2x80x9d is an array pointer, and xe2x80x9cIncaxe2x80x9d indicates the stride of A, which is the relative offset within the array for each element to be operated upon. The SASUM subprogram sums the elements of array A at the Inca stride. Thus, for example, if the stride were 2, every second element (e.g., elements A[1], A[3], A[5], etc.) would be summed.
In 1990, the Fortran 90 (F90) language was developed as an improvement over the F77 language by providing a number of additional features, including optional parameters and parameter checking. The use of optional parameters allows a programmer to use different parameter lists to invoke the same subprogram. For example; the following three subprogram calls invoke the same subprogram, even though the number of parameters differs:
Total=SASUM (grades)
Total=SASUM (N, grades)
Total=SASUM (N, grades, Inca)
F90""s parameter checking feature determines whether the types of the parameters are appropriate, whether the number of parameters in the parameter list is appropriate, and whether the shape of the parameters is appropriate. The xe2x80x9cshapexe2x80x9d of a parameter refers to the dimensionality of the parameter. For example, a two-dimensional array has a shape of 2D.
Although F90 provides a number of beneficial features, because there is so much existing code written in F77, it is cost prohibitive to rewrite all of the F77 code. Therefore, it is desirable to facilitate the use of F77 code from F90 code.
In accordance with methods and systems consistent with the present invention, a system that automatically generates F90 interfaces to F77 code is provided. These interfaces provide for the use of optional parameters and, because they are written in F90, also allow for parameter checking. These interfaces are automatically generated to allow a programmer to reap the benefits of F90 calling without having to rewrite the F77 underlying code. Furthermore, when generating the interfaces, methods and systems consistent with the present invention perform an optimization that both saves a significant amount of processing time and saves memory.
In accordance with an implementation consistent with the present invention, a method is provided in a data processing system containing a subprogram written in a first programming language. The subprogram receives a parameter in a form suitable for the first programming language. and converts the parameter to a form suitable for a second programming language that is different from the first programming language. The form suitable for the second programming language prevents a compiler from generating code to gather the parameter when the subprogram is compiled by the compiler. Furthermore, the subprogram invokes another subprogram written in the second programming language and passes the parameter in the form suitable for the second programming language.
In another implementation, a method is provided in a data processing system containing a program written in a first programming language. The program expresses a parameter written in a form suitable for the first programming language in a form suitable for a second programming language that is different from the first programming language. The form suitable for the second programming language prevents a compiler during compilation from generating code to gather the parameter. Furthermore, the program invokes code written in the second programming language using the parameter in the form suitable to the second programming language.
In yet another implementation, a computer-readable memory device is provided that is encoded with a program written in a first programming language. that passes first arrays as arguments by specifying dope vectors for the first arrays. The computer-readable memory device is also encoded with a subprogram written in a second programming language that receives second arrays as arguments by the arguments referring to memory addresses of the second arrays, wherein the program passes a passed array as a parameter to the subprogram by specifying a reference to a memory address of the passed array.